// Copyright (C) 2022 Huawei Device Co., Ltd.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package services

import (
	"dist/dao"
	"time"
)

func LoopUpdateTotalData() {
	insertTotalTables()
	loopTime := 6 * time.Hour
	timer := time.NewTimer(loopTime)
	for {
		select {
		case <-timer.C:
			insertTotalTables()
		}
		timer.Reset(loopTime)
	}
}

func insertTotalTables() {
	processBusinessUseTotal()
	processGeneralRecordTotal()
}

func processBusinessUseTotal() {
	currencyTime := time.Now()
	year, month, day := currencyTime.Date()
	yesterday := time.Date(year, month, day, 0, 0, 0, 0, currencyTime.Location()).AddDate(0, 0, -1)
	if dao.IsTsInBusinessUseTotalTbl(yesterday) {
		return
	}

	dao.InsertBusinessUseTotal(yesterday)
	dao.DeleteBusinessUseDay(yesterday.AddDate(0, 0, -30))
}

func processGeneralRecordTotal() {
	currencyTime := time.Now()
	year, month, day := currencyTime.Date()
	yesterday := time.Date(year, month, day, 0, 0, 0, 0, currencyTime.Location()).AddDate(0, 0, -1)
	if dao.IsTsInGeneralRecordTotalTbl(yesterday) {
		return
	}

	dao.InsertGeneralRecordTotal(yesterday)
	dao.DeleteGeneralRecordDay(yesterday.AddDate(0, 0, -30))
}
